package com.shujia.scala

object Demo7Fun {
  def main(args: Array[String]): Unit = {

    val arr = Array(1, 2, 3, 4, 5, 6, 7)

    for (elem <- arr) {
      println(elem)
    }

    println("-" * 100)

    def print(i: Int): Unit = {
      println(i)
    }

    //foreach  需要一个（参数为Int没有返回值的函数）
    // foreach  将数组里面的元素一个一个传递给print函数
    arr.foreach(println)

    println("=" * 100)

    val newArr = new Array[Int](arr.length)

    var i = 0
    for (elem <- arr) {
      val j = elem * 2
      newArr(i) = j
      i += 1
    }

    newArr.foreach(println)

    println("=" * 100)

    def f(i: Int): Int = {
      i * 2
    }

    //map  需要一个函数作为参数
    val arr2 = arr.map(f)

    val arr3 = arr.map(i => i * 2)

    arr2.foreach(println)

    /**
      * foreach  map    在任何一个可以变量的集合中都可以使用
      *
      * 相同点：将数组中的元素一个一个传递给函数
      * 不通点：foreach没有返回值   map返回一个新的数组
      *
      */

    //匿名函数

    def f1(i: Int): Unit = {
      println(i)
    }

    arr.foreach(f1)

    //i => println(i)   匿名函数
    arr.foreach((i: Int) => {
      println(i)
    })
    arr.foreach(i => println)


    arr.foreach(println)


    val s = "abcdefg"
    s.foreach(println)


    println("=" * 100)

    //取出arr里面所有的奇数
    def fun4(i: Int): Boolean = {
      return i % 2 == 1
    }

    //filter  数据过滤  返回一个新的数组  当里面的函数返回true保留数据 返回false过滤数据
    //链式调用
    arr
      .filter(fun4)
      .foreach(println)

    arr.filter(i => i % 2 == 1).foreach(println)

    //当参数只被使用一次的时候，可以使用_代替
    arr.filter(_ % 2 == 1).foreach(println)

  }
}
